package done.normal_701_800;

import com.study.common.TreeNode;
import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 700. Search in a Binary Search Tree 二叉搜索树中的搜索
 * <p>
 * 给定二叉搜索树（BST）的根节点和一个值。 你需要在BST中找到节点值
 * 等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在，则返回 NULL。
 * <p>
 * 例如，
 * 给定二叉搜索树:
 * <p>
 * 4
 * / \
 * 2   7
 * / \
 * 1   3
 * <p>
 * 和值: 2
 * 你应该返回如下子树:
 * <p>
 * 2
 * / \
 * 1   3
 */
@SuppressWarnings("all")
public class SearchInABinarySearchTree {

    public TreeNode searchBST(TreeNode root, int val) {
        //TODO
        if (root == null || root.val == val) {
            return root;
        }

        TreeNode left = searchBST(root.left, val);
        TreeNode right = searchBST(root.right, val);
        if (right == null)
            return left;
        else
            return right;
    }

    @Test
    public void test() {
        info(searchBST(new TreeNode(4,
                        new TreeNode(2,
                                1, new TreeNode(3,
                                5, 8)), 7),
                3));
    }
}
